package com.acyouzi.leetcode.array;

/**
 * Created by SUN on 2017/8/28.
 */
public class UniquePaths {
  public int uniquePaths(int m, int n) {
    int[][] dp = new int[m][n];
    for (int i = 0; i < m; i++) {
      dp[i][0] = 1;
    }
    for (int i = 0; i < n; i++) {
      dp[0][i] = 1;
    }
    for (int i = 1; i < m ; i++) {
      for (int j = 1; j < n; j++) {
        dp[i][j] = dp[i-1][j] + dp[i][j-1];;
      }
    }
    return dp[m-1][n-1];
  }
  public int uniquePathsWithObstacles(int[][] obstacleGrid) {
    int m = obstacleGrid.length;
    int n = obstacleGrid[0].length;
    int[][] dp = new int[m][n];
    if (obstacleGrid[0][0] == 0) dp[0][0] = 1;
    for (int i = 1; i < m; i++) {
      if (obstacleGrid[i][0] == 0) dp[i][0] = dp[i-1][0];
      else dp[i][0] = 0;
    }
    for (int i = 1; i < n; i++) {
      if (obstacleGrid[0][i] == 0) dp[0][i] = dp[0][i-1];
      else dp[0][i] = 0;
    }
    for (int i = 1; i < m ; i++) {
      for (int j = 1; j < n; j++) {
        if (dp[i][j] == 1) dp[i][j] = 0;
        else dp[i][j] = dp[i-1][j] + dp[i][j-1];
      }
    }
    return dp[m-1][n-1];
  }
}
